package skyhyun;

public class J01_Fundamentals {
	
	/**
	 *		OOP(객체 지향) 프로그램을 개발할 때 현실세계와 같은 객체 모델을 만들어야 함
	 * 	예를 들어 급여 프로그램은 직원, 세금, 회사 객체 등이 있어야 함
	 *  
	 *		하지만, 자바에서 객체는 유일한 데이터 형이 아님 ---> 기본(원시) 자료형
	 *		자바에서 기본 자료형은 모두 8가지가 있음
	 *
	 * 	처음 6개의 기본 자료형은 숫자를 나타냄 --> byte, short, int, long, float, double
	 * 	
	 * 	자연수, 정수 : byte, short, int, long
	 * 	소수점이 있는 정수(실수) : float, double
	 * 
	 * 	char : 단일 문자 저장시 사용
	 * 	boolean : 논리값(참, 거짓)
	 * 
	 * 	프로그램 작성시 사용하려는 자료의 크기에 따라 자료형을 적절히 선택
	 * 
	 * 	변수(varable)
	 * 		- 데이터가 저장될 장소를 의미
	 * 		- 자바는 엄격하게 자료형을 검사하는 언어임
	 * 		- 따라서, 모든 변수는 자료형이 선언되어야 함
	 * 		- 각각의 변수를 구분하기 위해 변수에 이름을 부여하는데
	 * 		- 이것을 변수명, 식별자(Identifier)라 함
	 * 
	 * 	변수 명명법
	 * 		- 식별자는 자바 문자와 자바 숫자로만 구성, 길이는 무제한
	 * 				--> 단, 식별자의 첫 글자는 문자이어야 함
	 * 		- 식별자는 자바의 예약어, boolean 리터럴, null 리터럴이면 안됨(true, false, null 이라는 변수명은 사용 불가)
	 * 		- 식별자는 특정 범위(scope)내에서 유일해야 함(중복 불가)
	 * 		- 식별자는 대/소문자를 구분함(x2, X2는 서로 다름)
	 * 
	 * 	자바 문자/자바 숫자
	 * 		- 자바문자는 ASCII 문자집합의 소/대 영문자, 달러 문자($)와, 밑줄 문자(_)를 의미
	 * 		- 자바 숫자는 ASCII 문자집합의 숫자 0~9를 의미
	 * 
	 * 	리터럴(Literal)
	 * 		- 가끔 프로그램상에서 변수에 값을 할당할 떄가 있음
	 * 		- 예를 들어, int에 숫자 2나 char에 문자 'a'처럼 변수에 값을 할당 할 때, 이 값은 컴파일러가
	 * 			이해할 수 있는 형식으로 표현해야 함
	 * 		- 소스코드 상의 값 표현법을 리터럴이라 함
	 * 		- 종류는 기본자료형(정수/실수/문자/논리값) 리터럴, 문자형(String) 리터럴, 널(null) 문자 리터럴
	 */
	
	/**
	 *		아스키코드(ASCII Code)
	 *			- 전통적으로 영어권 나라들은 알파벳을 표기하기 위해 ASCII 문자집합을 사용
	 *			- ASCII 문자집합에서 각 문자는 7비트를 사용
	 *			- 총 128개의 문자를 나타낼 수 있음
	 *		
	 *		유럽권 문자 표기를 위해 확장 ASCII 문자집합 사용
	 *			- 추가적으로 128개의 문자를 정의(총 256문자)
	 *
	 * 	하지만, 모든 국가들이 라틴 문자를 사용하지 않음
	 * 	동양 문화권에 속한 나라들은 다른 문자집합을 사용함
	 * 	게다가 8비트로 수천개의 문자를 나타내기에는 무리가 있음
	 * 
	 * 	유니코드(UniCode)
	 * 		- 유니코드 컨소시움이라는 비영리 단체에 의해 개발된 문자집합
	 * 		- 전 세계 언어의 문자를 하나의 문자 집합에 포함하려고 함
	 * 		- 유니코드에 있는 고유 번호로 정확히 한 문자를 표시
	 * 
	 * 	UTF-8
	 * 		- 바이트 가변길이 인코딩으로 유니코드 문자를 나타냄
	 * 		- 즉, 영어는 1바이트, 한글은 3바이트를 이용함
	 * 		- 대부분의 브라우저도 UTF-8 인코딩을 지원함
	 * 
	 * 	한국 문자집합
	 * 		- EUC-KR은 8비트 한글 완성형 문자 인코딩
	 * 		- ISO-2022-KR 이라고도 불림
	 * 		- 사용 빈도가 높은 2350자만을 채택
	 * 		- 기존의 부족했던 완성형 한글을 보완하기 위해 윈도 95부터 CP949(MS949)라는 문자 인코딩을 확장 완성형이라는 명칭으로 도입
	 * 		- KS C 5601-1987 라고 불리기도 함
	 * 		- 현대의 모든 한글을 수용하게 됨(8822자 추가)
	 */
	
	public static void main(String[] args) {
		// 변수 선언 및 값 할당		-->		[자료형] [변수명] = 리터럴;
		short birthyear = 1982;
		int birth_year = 1982;
		float pi = 3.14f;
		long jumin = 198207202120856L;
			// 리터럴을 의미하는 접미사는 대문자로 표기하는 것이 가독성이 좋음
		
		char _1st_name = '김',  _2st_name = '혜', _3st_name = '현', grade = '수';
		
		boolean isMale = true,  isMarried = false;
			// 동일한 자료형을 가지는 변수는 , 를 이용해서 다중 변수 선언이 가능
			// 하지만, 가독성이 떨어지기 때문에 비추!
		
		char code1 = '\uC790';			//유니코드
		char code2 = '\uBC14';
		char symbol1 = '\u263A';
		char symbol2 = '\u2639';
		
		// 변수 값 출력
		// 자바 표준 출력문 System.out.println() 사용
		// System.out.println( 변수명 );
		System.out.println("birthyear = " + birthyear);
		System.out.println("birth_year = " + birth_year);
		System.out.println("pi = " + pi);
		System.out.println("jumin = " + jumin);
		System.out.println();
		System.out.println("name = " + _1st_name + _2st_name + _3st_name);
		System.out.println("grade = " + grade);
		System.out.println();
		System.out.println("isMale = " + isMale);
		System.out.println("isMarried = " + isMarried);
		System.out.println("code1 = " + code1);
		System.out.println("code2 = " + code2);
		System.out.println("symbol1 = " + symbol1);
		System.out.println("symbol2 = " + symbol2);
	}
}